import Vue from 'vue'
import axios from 'axios';
import qs from 'Qs'
import { Loading } from 'element-ui';
import serverUrl  from '../config/client'
let loadingDlag 

/**
 * 主要params参数
 * @params method {string} 方法名
 * @params url {string} 请求地址  例如：/login 配合baseURL组成完整请求地址
 * @params baseURL {string} 请求地址统一前缀 ***需要提前指定***  例如：http://cangdu.org
 * @params timeout {number} 请求超时时间 默认 30000
 * @params params {object}  get方式传参key值
 * @params headers {string} 指定请求头信息
 * @params withCredentials {boolean} 请求是否携带本地cookies信息默认开启
 * @params validateStatus {func} 默认判断请求成功的范围 200 - 300
 * @return {Promise}
 * 其他更多拓展参看axios文档后 自行拓展
 * 注意：params中的数据会覆盖method url 参数，所以如果指定了这2个参数则不需要在params中带入
 */
export default class Server {
    axios(method, url, params){
        return new Promise((resolve, reject)=>{
            if (typeof params !== 'object') params = {};
            let _option = {
				method,
				url,
				baseURL: serverUrl,
				timeout: 30000,
				headers: {
                    'Accept': 'application/json;charset=UTF-8',
				},
				responseEncoding: 'utf8', // default
				withCredentials: false, //是否携带cookies发起请求
				maxContentLength: 3000, //定义允许的响应内容的最大尺寸
				validateStatus: (status) => {
					return status >= 200 && status < 300;
				},
				// 后面数组中的函数必须返回一个字符串，或 ArrayBuffer，或 Stream
				transformRequest: [function (data, headers) {
                    loadingDlag = Loading.service({
                        lock: true,
                        text: '加载中。。。',
                        background: 'rgba(0, 0, 0, 0.7)'
                    });
					// 对 data 进行任意转换处理
					return data;
				}],
				// `transformResponse` 在传递给 then/catch 前，允许修改响应数据
				transformResponse: [function (data) {
                    loadingDlag.close()
					return JSON.parse(data);
				}],
            }
            if (_option.method == 'post') {
				_option.data = qs.stringify(params);
			} else if (_option.method == 'get') {
				_option.params = params;
            }
            axios.request(_option).then(res => {
				//错误逻辑
				// debugger;
				if (res.data.status == 401) {
					//code
					// this.$electron.ipcRenderer.send("creat-child-window", {
					// 	url: "http://localhost:9080/#/login",
					// 	type: "min"
					// });
					// // this.handclicadd(); //显示登录
					// this.$electron.ipcRenderer.send("window-hide");
				} else {
					resolve(res.data)
				}

			}, error => {
				if (error.response) {
					reject(error.response.data)
				} else {
					reject(error)
				}
			});
        })
    }
}